/**
 * @desc   对象深拷贝
 * @param  {Object} target  传过来目标对象
 * @param  {Object} map 存放缓存结果容器
 * @return {Object} 
 */
export function deepClone(target, map=new Map()){
    //检测数据类型
    if(typeof target === 'object' && target !== null){
        //克隆数据之前，进行判断，数据之前石佛偶克隆过
        let cache = map.get(target)
        if(cache){
            return cache
        }
        let isArray = Array.isArray(target)
        //创建一个容器
        const result = isArray ? [] : {}
        //将新的结果存入到容器中
        map.set(target,result)
        //遍历对象
        if(isArray){
            //目标数据为数组  用foreach
            target.forEach((item,index)=>{
                result[index] = deepClone(item,map)
            })
        }else{
            //目标元素为对象
            Object.keys(target).forEach(key => {
                result[key] = deepClone(target[key],map)
            })
        }
        return result
    }else{
        return target
    }
}